// 导入axios
import axios from 'axios'
import { getlocal } from '@/utils/local.js'

import Vue from 'vue'
import { Toast } from 'vant'
// import { researchToken } from '@/api/login'

// 导入'json-bigint'处理数字过长插件
import JSONBig from 'json-bigint'

Vue.use(Toast)

const _fetch = axios.create({
  // 配置基地址
  baseURL: 'http://toutiao-app.itheima.net',
  // 自定义后端返回的原始数据
  // data: 后端返回的原始数据，说白了就是 JSON 格式的字符串
  transformResponse: [
    function (data) {
      try {
        return JSONBig.parse(data)
      } catch (err) {
        return data
      }

      // axios 默认会在内部这样来处理后端返回的数据
      // return JSON.parse(data)
    }
  ]
})

// 请求拦截
// 添加请求头,如果需要请求头,路由元信息会告诉响应需要,请求元设置needToken
_fetch.interceptors.request.use(
  function (config) {
    if (config.needToken) {
      config.headers.authorization = `Bearer ${getlocal()}`
    }
    // 在这里判断是否过期

    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)

// 响应拦截
_fetch.interceptors.response.use(
  async function (res) {
    // console.log('响应', res)
    // 看一下响应回来是什么
    // 如果status是200返回res,不是提示错误,这样不需要其他页面都抓取错误,但是因为状态码成功会是200或者201
    if (res.status === 200 || res.status === 201 || res.status === 204) {
      // console.log('1到', res)
      return res
    } else {
      // 不是提示错误
      Toast.fail('请重新登录')
      // 中止.then执行
      return Promise.reject(new Error(res.data.message))
    }
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)
export { _fetch }
